﻿/*
题目：小美的平衡矩阵

小美拿到了一个n∗n的矩阵，其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的，当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在，小美希望你回答有多少个 i 边长的完美矩阵

https://www.nowcoder.com/exam/test/83595281/detail?pid=55750581
*/

#include <iostream>
#include <string>
#include <vector>
#include <list>
#include "TreeNode.hpp"
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <functional>

using namespace std;

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;

    vector<vector<int>> prefix(n + 1, vector<int>(n + 1, 0));
    for (int i = 1; i <= n; i++) {
        string tmp;
        cin >> tmp;

        for (int j = 1; j <= n; j++) {
            prefix[i][j] = prefix[i - 1][j] + prefix[i][j - 1] -
                prefix[i - 1][j - 1] + (tmp[j - 1] == '1');
        }
    }

    printf("0\n");
    for (int len = 2; len <= n; len++) {
        int res = 0;
        for (int i = 1; i + len - 1 <= n; i++) {
            for (int j = 1; j + len - 1 <= n; j++) {
                int cnt = prefix[i + len - 1][j + len - 1] - prefix[i + len - 1][j - 1] -
                    prefix[i - 1][j + len - 1] + prefix[i - 1][j - 1];
                if (cnt * 2 == len * len)    res++;
            }
        }
        printf("%d\n", res);
    }

    return 0;
}